import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers'
import { resolve } from 'path'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      // 自动导入 Vue 相关函数，如：ref, reactive, toRef 等
      imports: [
        'vue',
        'vue-router',
        'pinia',
        '@vueuse/core',
        {
          'ant-design-vue': ['message']
        }
      ],
      // 生成自动导入的TS声明文件
      dts: 'src/auto-imports.d.ts',
      // 自动导入目录下的模块
      dirs: [
        './src/stores/**', // 扫描 stores 目录下所有文件
        './src/composables/**'
      ],
      // 自定义解析器
      resolvers: [
        // Ant Design Vue 组件自动导入
        AntDesignVueResolver(),
        // 自定义 store 导入解析
        (name) => {
          if (name.startsWith('use') && name.endsWith('Store')) {
            return { from: `@/stores/${name.slice(3).toLowerCase()}` }
          }
        }
      ],
      // 生成相应的.eslintrc-auto-import.json文件
      eslintrc: {
        enabled: true
      }
    }),
    Components({
      // 自动导入组件的目录
      dirs: ['src/components'],
      // 组件的有效文件扩展名
      extensions: ['vue'],
      // 配置文件生成位置
      dts: 'src/components.d.ts',
      // 自动导入 Ant Design Vue 组件
      resolvers: [
        AntDesignVueResolver({
          importStyle: 'less', // 使用 less 样式
          resolveIcons: true // 自动导入图标
        })
      ]
    })
  ],
  resolve: {
    alias: {
      '@': resolve(__dirname, 'src')
    }
  },

  server: {
    host: '0.0.0.0', // 允许外部访问
    port: 5173,
    // 可以在这里配置API代理
    proxy: {
      '/api': {
        target: 'http://localhost:3000',
        changeOrigin: true,
        secure: false
      }
    }
  },

  define: {
    global: 'globalThis'
  },

  optimizeDeps: {
    include: ['monaco-editor/esm/vs/editor/editor.api', 'monaco-editor/esm/vs/basic-languages/html/html', 'monaco-editor/esm/vs/basic-languages/css/css', 'monaco-editor/esm/vs/basic-languages/javascript/javascript']
  },

  build: {
    rollupOptions: {
      output: {
        manualChunks: {
          monaco: ['monaco-editor']
        }
      }
    }
  }
})
